//
//  WBRefreshControl.m
//  OCMicroBlog
//
//  Created by 002 on 15/11/8.
//  Copyright © 2015年 002. All rights reserved.
//

#import "WBRefreshControl.h"
#import "masonry.h"
#import "WBRefreshView.h"
#import "UIView+Extention.h"

@interface WBRefreshControl ()

// 刷新视图
@property(nonatomic,strong) WBRefreshView *refreshView;

// 旋转标志
@property(nonatomic,assign) BOOL rotateFlag;

@end

// 下拉 偏移量
static CGFloat WBRefreshControlOffset = -60;

@implementation WBRefreshControl

/**
 *  构造函数
 *
 *  @return WBRefreshControl
 */
- (instancetype)init {
    if (self = [super init]) {
        [self setupUI];
    }
    return self;
}

// 重写系统的监听方法
- (void)beginRefreshing {
    [super beginRefreshing];
    
    [self.refreshView startAnimation];
}

- (void)endRefreshing {
    [super endRefreshing];
    
    [self.refreshView stopAnimation];
}

// MARK: - KVO 监听方法
/**
 1. 始终待在屏幕上
 2. 下拉的时候，frame 的 y 一直变小，相反（向上推）一直变大
 3. 默认的 y 是 0
 */
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
//    NSLog(@"%@",NSStringFromCGRect(self.frame));
    // 1. 判断是否下拉
    if (self.y > 0 ) {
        return;
    }
    
    // 2. 判断是否正刷新
    if (self.refreshing) {
        [self.refreshView startAnimation];
        return;
    }
    
    // 3.
    if (self.y < WBRefreshControlOffset && !self.refreshView.rotateFlag) {
        
        NSLog(@"反过来");
        self.refreshView.rotateFlag = true;
    }
    if (self.y >= WBRefreshControlOffset && self.refreshView.rotateFlag) {
        
        NSLog(@"转过去");
        self.refreshView.rotateFlag = false;
    }
}

#pragma mark - 设置界面
- (void)setupUI {

    // 1. 添加控件
    [self addSubview:self.refreshView];
    
    // 2. 布局
    // 自动布局 - 从 `XIB 加载的控件`需要指定大小约束
    [self.refreshView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(self.mas_centerX);
        make.centerY.equalTo(self.mas_centerY);
        make.width.equalTo(@(self.refreshView.bounds.size.width));
        make.height.equalTo(@(self.refreshView.bounds.size.height));
    }];
    
    
    // 3.
    // 使用 KVO 监听位置变化 - 主队列，当主线程有任务，就不调度队列中的任务执行
    // 让当前运行循环中所有代码执行完毕后，运行循环结束前，开始监听
    // 方法触发会在下一次运行循环开始！
    dispatch_async(dispatch_get_main_queue(), ^{
        [self addObserver:self forKeyPath:@"frame" options:0 context:nil];
    });
    
    
    NSLog(@"%@",self.refreshView);
}

- (void)dealloc {
    // 删除 KVO 监听方法
    [self removeObserver:self forKeyPath:@"frame"];
}


#pragma  mark - 懒加载
- (WBRefreshView *)refreshView {
    if (!_refreshView) {
        _refreshView = [WBRefreshView refreshView];
    }
    return _refreshView;
}

@end
